package com.hejia.alauda.service;

import com.hejia.alauda.entity.*;
import com.hejia.alauda.entity.example.AddressExample;
import com.hejia.alauda.entity.example.InvitationExample;
import com.hejia.alauda.entity.example.QualificationExample;
import com.hejia.alauda.mongodb.IwxTicket;
import com.hejia.alauda.service.CommonServiceImpl.DownloadCounter;
import com.hejia.alauda.utils.Pager;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor;

/**
 * Created by Johnny(johnny@hejiajinrong.com) on 14-9-4.
 */

//@Deprecated
public interface CommonService {
	
	int test(Long id);
	
    String getProductSerial();
    String getOrderSerial();
    String getAgreementSerial();
    
    Map<String,Object> getAssets(User user, String os, String version);
    
    void setLoginFailedConunt(String mobile);
    
    Integer getLoginFailedConunt(String mobile);
    
    void clearLoginFailedConunt(String mobile);
    
    void setMobileSendMessage(String mobile);
    
    Object getMobileSendMessage(String mobile);
    
    /**
     * 初始化一些数据
     */
    void initializing();
    
    /**
     * 获取微信的全局唯一票据 access_token
     * @param appid
     * @param secret
     * @return
     */
    String getAccessToken(String appid,String secret);
    
    /**
     * 获取jsapi_ticket
     * @return
     */
    String getTicket(String access_token);
    
    /**
     * 是否显示新手标
     * @param user
     * @return
     */
    boolean isRookieHidden(User user);
    
    /**
     * 查询用户的分享者
     * @param user
     * @return
     */
    User isShared(User user);
    
    /**
     * 判断是否快客传媒
     * @param user
     * @return
     */
    boolean isQkmedia(User user);
    
    /**
     * 检查福利二维码是否正确
     * @return
     */
    long checkGewaraTicket();
    
    /**
     * 查询code是否已经被抽走
     * @param code
     * @return
     */
    BenefitsCode findBenefitsCode(String code);
    
    /**
     * 查看抽奖人抽到多少虚拟理财金
     */
    BenefitsCode findRandomBenefits(String mobile, String code);
    
    /**
     * 是否领取过年会的虚拟理财金
     * @param mobile
     * @return
     */
    BenefitsCode findReceiveBenefitsByMobile(String mobile);
    
    /**
     * 判斷用戶是否領取過20元註冊紅包
     * @param user
     * @return
     */
    boolean isReceiveTwenty(User user);
    
    /**
     * 判断是否在20150215之前有过交易
     * @param user
     * @return
     */
    boolean isTradedBefore20150215(User user);
    
    /**
     * 领取电影票
     * @param user
     * @return
     */
    int getGewaraTicket(User user, Executor executor, boolean devMode);
    
    GewaraTicket getGewaraTicket(String mobile);
    
    List<GewaraTicket> findGewaraTicketByUser(String mobile);
    
    List getMongoList();
    
    void setOpsForValue(String key, Object value, Date expired);
    
    Object getOpsForValue(String key);
    
    void setMongodbForValue(String key, Object value);
    
    void setMongodbForValue(String key, Object value, Date expired);
    
    Object getMongodbForValue(String key);
    
    long getMongodbForCountByRegex(String regex);
    
    void deleteMongodbForValue(String key);
    
    void deleteMongodbForExpiredDate();
    
    void saveVerificationStatus(String ip, String userAgent, String url);
    
    Pager<VerificationIp> getVerificationIpList(Pager<VerificationIp> pager);
    
    Pager<VerificationUserAgent> getVerificationUserAgentList(Pager<VerificationUserAgent> pager);
    
    boolean saveVerification(String id, Boolean disabled, String clazz);
    
    VerificationIp getVerificationIp(String ip);
    
    VerificationUserAgent getVerificationUserAgent(String userAgent);
    
    /**
     * 根据条件查询用户的单条抽奖资格记录--行数
     * @param example
     * @return
     */
    int findQualificationCountByExample(QualificationExample example);
    
    /**
     * 根据条件查询用户的单条抽奖资格记录
     * @param example
     * @return
     */
    Qualification findQualificationByExample(QualificationExample example);
    
    /**
     * 根据条件查询用户的抽奖资格记录
     * @param example
     * @return
     */
    List<Qualification> findQualificationsByExample(QualificationExample example);
    
    
    /**
     * 根据条件查询用户的抽奖资格记录
     * @param example
     * @return
     */
    List<Qualification> findQualificationsByExample(QualificationExample example,Pager<Qualification> page);
    
    /**
     * 根据ID查询中奖的信息
     * @param id
     * @return
     */
    Qualification findQualificationById(Long id);
    
    /**
     * 修改用户的抽奖资格
     * @param qualification
     */
    int updateQualification(Qualification qualification);
    
    /**
     * 新增用户的抽奖资格
     * @param qualification
     */
    int insertQualification(Qualification qualification);
    
    /**
     * 用户查询自己抽奖的中奖情况
     * @param params
     * @return
     */
    List<Qualification> findAwardsByUser(User user);
    
    /**
     * 抽奖
     * @return
     */
    Award luckydraw();
    
    /**
     * 查询抽奖的情况
     * @return
     */
    @SuppressWarnings("rawtypes")
	List findQualificationList();
    
    /**
     * 根据条件查询用户的收货地址
     * @param example
     * @return
     */
    Address findAddressByExample(AddressExample example);
    
    /**
     * 增加用户收货地址
     * @param address
     * @return
     */
    int insertAddress(Address address);
    
    /**
     * 修改用户收货地址
     * @param address
     * @return
     */
    int updateAddress(Address address);
    
    /**
     * 判断是否是指定参数的渠道用户
     * @param user
     * @param channels
     * @return
     */
    boolean isChannel(User user, String... channels);
    
    /**
     * 判断用户是否有分享过后的资格
     * @param user
     */
    void checkMarchTrafficQualification(User user);
    
    /**
     * 用户收货地址添加
     * @param user 用户对象
     * @param name 收货人
     * @param mobile 手机号
     * @param address 收货地址
     */
    void insertAddress(User user, String name, String mobile, String address);
    
    /**
     * 把用户的资产可赎回的红点设置为true
     */
    void setUserInvestmentsReaded(User user);
    
    /**
     * 计算两个日期之间的天数差
     * @param date1
     * @param date2
     * @return
     */
    int caculateDateInterval(String date1, String date2);
    
    /**
     * 发送优酷的订购消息
     */
    void sendYoukuOrder(User user, Award award, String productId, String productName);
    
    /**
     * 判读是否优酷邀请的类型
     * @param user
     * @return
     */
    boolean isYoukuInvite(User user);
    
    /**
     * 本站发送优酷的卡片
     * @param user
     */
    void sendYoukuCard(User user, Award award);
    
    /**
     * 生成红包码
     */
    IwxTicket createRedCode(Integer amount);
    
    /**
     * 获取订单编号的列表
     * @param track_id
     * @return
     */
    List<OrderSerial> getOrderSerialList(String track_id);
    
    /**
     * 获取订单编号的列表
     * @param orderNumber
     * @return
     */
    OrderSerial getOrderSerialByOrderNumber(String orderNumber);
    
    
    /**
     * 获取订单编号的列表
     * @param mobile
     * @return
     */
    void saveMobileForSaleNotify(User user, String mobile);
    
    boolean getSaleNofity(User user);
    /**
     * 获取上线项目数
     * @return
     */
    BigDecimal getProductCount();
    
    
    /**
     * 获取已回款金额
     * @return
     */
    BigDecimal getFinishedAmount();
    
    DownloadCounter getDownloadCounts();
    void updateDownloadCounts(DownloadCounter counter);
    
     String getAgreementSerial(String date);
}